package com.ipartek.formacion.ficheros;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import com.ipartek.formacion.bbdd.PersonaBD;
import com.ipartek.formacion.bean.Persona;
import com.ipartek.formacion.bean.Principal;
import com.ipartek.formacion.enumeraciones.Rol;

public class LeerFichero {

	static final String PATH_DATA1 = "data/personas.txt";
	static final String PATH_DATA2 = "log/personasErroneas.txt";
	// public static ArrayList<Persona> persona;
	static Persona p;
	static boolean registroErroneo;
	static Rol registroRol;
	static FileWriter fw;
	static BufferedWriter bw;

	public static void cargarPersonas() {

		File fichero = new File("log/personasErroneas.txt");
		BufferedReader br = null;
		FileReader fr = null;
		try {
			fr = new FileReader(PATH_DATA1);
			br = new BufferedReader(fr);
			// BufferedWriter
			fichero.delete();
			fw = new FileWriter(PATH_DATA2);
			bw = new BufferedWriter(fw);

			// persona = new ArrayList<Persona>();

			// Lectura del fichero
			String linea;
			while ((linea = br.readLine()) != null) {
				registroErroneo = false;
				String[] registro = new String[7];
				registro = linea.split(",");
				if (registro.length < 7) {
					registroErroneo = true;
				} else {
					if ("TRABAJADOR".equalsIgnoreCase(registro[6])) {
						registroRol = Rol.TRABAJADOR;
					} else if ("JEFE".equalsIgnoreCase(registro[6])) {
						registroRol = Rol.JEFE;
					} else if ("CLIENTE".equalsIgnoreCase(registro[6])) {
						registroRol = Rol.CLIENTE;
					} else {
						registroErroneo = true;
					}
					if (!registroErroneo) {
						p = new Persona(registro[0], registro[1], registro[2],
								Integer.parseInt(registro[3]), registro[4],
								registro[5], registroRol);
					}
					if (p.getNombre() == null || p.getApellido1() == null
							|| p.getApellido2() == null || p.getEdad() == 0
							|| p.getEmail() == null || p.getDni() == null) {
						registroErroneo = true;
					}

					if (registroErroneo == false) {
						// persona.add(p);
						// si el registro es correcto se inserta en la base de
						// datos
						PersonaBD.InsertarPersona(p);
					} else {
						// guardar registro erroneo en un fichero txt
						GuardarErroneos(linea);
					}
				}

			}

		} catch (FileNotFoundException e) {
			Principal.log.error("No encuentra el fichero: " + PATH_DATA1);
		} catch (IOException e) {
			Principal.log.error("IOException");
		} catch (Exception e) {
			Principal.log.error("Excepcion general");
		} finally {
			if (fr != null) {
				try {
					fr.close();
				} catch (IOException e) {
					Principal.log.error("IOException");
				}
			}
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					Principal.log.error("IOException");
				}
			}
		}

	}

	public static void GuardarErroneos(String personaErronea) {
		try {
			bw.write(personaErronea);
		} catch (IOException e) {
			Principal.log.error("IOException");
		} finally {
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					Principal.log.error("IOException");
				}
			}
			if (fw != null) {
				try {
					fw.close();
				} catch (IOException e) {
					Principal.log.error("IOException");
				}
			}
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					Principal.log.error("IOException");
				}
			}
		}
	}
}
